#ifndef CATALOG_H
#define CATALOG_H

#include <stdint.h>
#include "ast.h"

// 系统表常量
extern const char *CAT_TABLES;
extern const char *CAT_COLUMNS;

// 基础数据结构定义
typedef struct {
    const char *name;
    ColumnType type;  // 列数据类型
    uint16_t max_len; // VARCHAR类型的最大长度
} ColumnDef;

typedef struct {
    const char *table_name;
    int ncols;
    ColumnDef *cols;
    uint32_t root_pid;     // 表数据的起始页
} TableSchema;

// 行头信息（简化处理）
typedef struct {
    uint8_t deleted; // 0:正常 1:已删（便于跨页检索时快速判断）
} RowHeader;

// 内存版本：模式目录结构
typedef struct {
    TableSchema** tables;
    int table_count;
} Catalog;

// 持久化版本：系统表行结构
typedef struct {
    char name[32];
    uint32_t root_pid;     // 表数据的起始页
} TablesRow;

typedef struct {
    char table_name[32];
    char col_name[32];
    int  col_type;
    int  max_len;
} ColumnsRow;

// 内存版本操作函数
Catalog* create_catalog();
void free_catalog(Catalog* catalog);
int add_table_to_catalog(Catalog* catalog, TableSchema* table);
TableSchema* find_table_in_catalog(Catalog* catalog, const char* table_name);
// 修改函数声明，将返回类型从ColumnDefinition*改为int
int find_column_in_table(TableSchema* table, const char* column_name);
TableSchema* create_table_schema_from_ast(ASTNode* node);
int add_column_to_table(TableSchema* table, const char* column_name, ColumnType column_type, uint16_t max_len);

// 持久化版本操作函数
extern int catalog_bootstrap();   // 初始化catalog（若不存在则创建系统表）
extern int catalog_register_table(const char *name, uint32_t root_pid);
extern int catalog_add_column(const char *t, const char *c, int type, int max_len);
extern int catalog_get_table(const char *name, TablesRow *out);
extern int catalog_load_schema(const char *name, TableSchema *schema, ColumnDef *cols_buf, int cols_cap);
int catalog_load_all_tables(Catalog* catalog);
Catalog* get_global_catalog();

#endif // CATALOG_H